<?php

/**
 * alumno actions.
 *
 * @package    sistema_itec_new
 * @subpackage alumno
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class alumnoActions extends sfActions {

    public function executeIndex(sfWebRequest $request) {
        
    }

    public function executeShow(sfWebRequest $request) {
        $this->persona = Doctrine_Core::getTable('Persona')->findOneByUsuarioId($this->getUser()->getGuardUser()->getId());
        if (!$this->persona) {
            $this->getUser()->setFlash('error', 'Primero debes completar el censo.');
            $this->redirect('alumno/censo');
        }
    }

    public function executeCenso(sfWebRequest $request) {
        $this->persona = Doctrine::getTable('Persona')->findOneByUsuarioId($this->getUser()->getGuardUser()->getId());
        if ($this->persona) {
            $this->form = new PersonaAlumnoForm($this->persona);
            $this->anac = Doctrine::getTable('AntecedenteAcademicoTmp')->findOneByAlumnoId($this->persona->getId());
            $this->acufs = Doctrine::getTable('AlumnoCohorteUnidadFormacion')->findByAlumnoId($this->persona->getId());
        } else {
            $this->form = new PersonaAlumnoForm();
        }
    }

    public function executeCreate(sfWebRequest $request) {
        $this->forward404Unless($request->isMethod(sfRequest::POST));

        $this->form = new PersonaAlumnoForm();

        $req_persona = $request->getParameter('persona');
        $req_alumno = $req_persona['new_Alumno'];
        $req_alumno['estado_administrativo_inicio'] = 2;
        $req_alumno['estado_administrativo_actual'] = 2;
        $req_alumno['estado_economico_inicio'] = 3;
        $req_alumno['estado_economico_actual'] = 3;
        $req_alumno['estado_academico_actual'] = 14;
        foreach ($req_alumno['new_AlumnoCohorteUnidadFormacion'] as $key => $acufForm) {
            $req_alumno['new_AlumnoCohorteUnidadFormacion'][$key]['estado_id'] = 14;
            $req_alumno['new_AlumnoCohorteUnidadFormacion'][$key]['turno_id'] = 1;
        }
        $req_persona['localidad_id'] = 1;
        $req_persona['fecha_censo'] = date('Y-m-d h:i:s', time());
        $req_persona['usuario_id'] = $this->getUser()->getGuardUser()->getId();
        $req_persona['fecha_nacimiento'] = date('Y-m-d', strtotime(str_replace('/', '-', $req_persona['fecha_nacimiento'])));
        $req_persona['new_Alumno'] = $req_alumno;
        $request->setParameter('persona', $req_persona);

        $this->processForm($request, $this->form);

        $this->getUser()->setFlash('error', 'Se ha producido un error al guardar los datos. Por favor intente nuevamente.');
        $this->setTemplate('censo');
    }

    public function executeUpdate(sfWebRequest $request) {
        $this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT));
        $this->forward404Unless($persona = Doctrine_Core::getTable('Persona')->findOneByUsuarioId($this->getUser()->getGuardUser()->getId()), sprintf('Object persona does not exist (%s).', $this->getUser()->getGuardUser()->getId()));
        $this->form = new PersonaAlumnoForm($persona);

        $alumno = $persona->getAlumno();
        $acufs = Doctrine::getTable('AlumnoCohorteUnidadFormacion')->findByAlumnoId($alumno->getId());
        $req_persona = $request->getParameter('persona');
        $req_alumno = $req_persona['Alumno'];
        $req_alumno['estado_administrativo_inicio'] = $alumno->getEstadoAdministrativoInicio();
        $req_alumno['estado_administrativo_actual'] = $alumno->getEstadoAdministrativoActual();
        $req_alumno['estado_economico_inicio'] = $alumno->getEstadoEconomicoInicio();
        $req_alumno['estado_economico_actual'] = $alumno->getEstadoEconomicoActual();
        $req_alumno['estado_academico_actual'] = $alumno->getEstadoAcademicoActual();
        foreach ($acufs as $key => $acuf) {
            $req_alumno['AlumnoCohorteUnidadFormacion'][$key]['motivo_eleccion'] = $acufs[$key]->getMotivoEleccion();
            $req_alumno['AlumnoCohorteUnidadFormacion'][$key]['alumno_id'] = $alumno->getPersonaId();
            $req_alumno['AlumnoCohorteUnidadFormacion'][$key]['cohorte_unidad_formacion_id'] = $acuf->getCohorteUnidadFormacionId();
            $req_alumno['AlumnoCohorteUnidadFormacion'][$key]['estado_id'] = $acuf->getEstadoId();
            $req_alumno['AlumnoCohorteUnidadFormacion'][$key]['turno_id'] = $acuf->getTurnoId();
            $req_alumno['AlumnoCohorteUnidadFormacion'][$key]['accion_comunicacional_id'] = $acuf->getAccionComunicacionalId();
        }
        $req_persona['localidad_id'] = 1981;
        $req_persona['fecha_censo'] = date('Y-m-d h:i:s', time());
        $req_persona['usuario_id'] = $this->getUser()->getGuardUser()->getId();
        $req_persona['fecha_nacimiento'] = date('Y-m-d', strtotime(str_replace('/', '-', $req_persona['fecha_nacimiento'])));
        $req_persona['Alumno'] = $req_alumno;
        $request->setParameter('persona', $req_persona);

        $this->processForm($request, $this->form);

        $this->getUser()->setFlash('error', 'Se ha producido un error al guardar los datos. Por favor intente nuevamente.');
        $this->setTemplate('censo');
    }

    protected function processForm(sfWebRequest $request, sfForm $form) {
        $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));

        if ($form->isValid()) {
            $conn = Doctrine_Manager::getInstance()->connection();
            $conn->beginTransaction();

            try {
                $new = $form->getObject()->isNew();
                $persona = $form->save();

                $numera_legajo = Doctrine::getTable('Config')->findOneByKey('NUMERA_LEGAJO');
                $persona->setLegajo($numera_legajo->getValue() + 1);
                $numera_legajo->setValue($numera_legajo->getValue() + 1);
                $persona->save();
                $numera_legajo->save();

                $anac = $request->getParameter('anac');
                if ($anac['id'] != '') {
                    $anac_obj = Doctrine::getTable('AntecedenteAcademicoTmp')->findOneById($anac['id']);
                } else {
                    $anac_obj = new AntecedenteAcademicoTmp();
                }
                $anac_obj->setInstitucion($anac['institucion']);
                $anac_obj->setTitulo($anac['titulo']);
                $anac_obj->setFecha(date('Y-m-d', strtotime(str_replace('/', '-', $anac['fecha']))));
                $anac_obj->setEstadoId($anac['estado']);
                $anac_obj->setAlumnoId($persona->getId());
                $anac_obj->save();
                
                $conn->commit();

                if($new) {
                    $this->redirect('alumno/censoCompletado');
                }
                $this->getUser()->setFlash('notice', 'Sus datos se han guardado correctamente.');
                $this->redirect('home/index');
            } catch (Doctrine_Exception $e) {
                $conn->rollback();
                $this->getUser()->setFlash('error', 'Se ha producido un error al guardar los datos. Por favor intente nuevamente.');
                $this->setTemplate('censo');
            }
        }
    }

    public function executePrintForm(sfWebRequest $request) {
        $persona = Doctrine::getTable('Persona')->findOneByUsuarioId($this->getUser()->getGuardUser()->getId());
        $this->forward404Unless($persona);

        $anac = $request->getParameter('antecedente_academico');
        if (isset($anac)) {
            $titulo = new AntecedenteAcademico();
            $titulo->setTitulo($anac['titulo']);
            $titulo->setInstitucion($anac['institucion']);
            $titulo->setFecha(date('Y-m-d', strtotime($anac['fecha'])));
            $titulo->setEstadoId($anac['estado_id']);
            $titulo->setNivelId($anac['nivel_id']);
            $titulo->setPersonaId($persona->getId());
            $titulo->save();
        }
        $cui = $request->getParameter('cui');
        $equiv = $request->getParameter('equiv');

        $titulo_secundario = Doctrine::getTable('AntecedenteAcademico')->getTitulo($persona->getId(), 3);
        $this->forward404Unless($titulo_secundario);

        $html = $this->getPartial('printForm', array('persona' => $persona, 'titulo_secundario' => $titulo_secundario, 'cui' => $cui, 'equiv' => $equiv));
        $pdf = new DOMPDF;
        $pdf->load_html($html);
        $pdf->set_paper('A4', 'portrait');
        $pdf->render();
        $pdf->stream('formulario.pdf', array('Attachment' => 0));
    }

    public function executePreinscripcion(sfWebRequest $request) {
        $this->form = new PreinscriptoForm();
    }

    public function executeCompletarPreinscripcion(sfWebRequest $request) {
        $this->forward404Unless($request->isMethod(sfRequest::POST));
        $this->form = new PreinscriptoForm();

        $this->form->bind($request->getParameter($this->form->getName()), $request->getFiles($this->form->getName()));

        if ($this->form->isValid()) {
            $preinscripto = $this->form->save();
            $user = new sfGuardUser();
            $user->setFirstName($preinscripto->getNombre());
            $user->setLastName($preinscripto->getApellido());
            $user->setEmailAddress($preinscripto->getEmail());
            $user->setUsername($preinscripto->getDocumento());
            $user->setPassword($preinscripto->getDocumento());
            $user->setIsActive(true);
            $user->save();
        } else {
            $this->getUser()->setFlash('error', 'Se ha producido un error al guardar los datos.');
            $this->setTemplate('preinscripcion');
        }
    }

    public function executeValidateUniqueEmail(sfWebRequest $request) {
        $email = $request->getParameter('email');
        $preinscripto = Doctrine::getTable('SfGuardUser')->findOneByEmailAddress($email);
        if ($preinscripto)
            return $this->renderText('true');
        return $this->renderText('false');
    }

    public function executeValidateUniqueDocument(sfWebRequest $request) {
        $document = $request->getParameter('document');
        $preinscripto = Doctrine::getTable('SfGuardUser')->findOneByUsername($document);
        if ($preinscripto)
            return $this->renderText('true');
        return $this->renderText('false');
    }
    
    public function executeCensoCompletado(sfWebRequest $request) {
        
    }
    
    public function executeImprimirFormularioMatricula(sfWebRequest $request) {
        $this->persona = Doctrine::getTable('Persona')->findOneByUsuarioId($this->getUser()->getGuardUser()->getId());
        if (!$this->persona) {
            $this->getUser()->setFlash('error', 'Primero debes completar el censo.');
            $this->redirect('alumno/censo');
        }
        sfConfig::set('sf_web_debug', false);
        //return $this->renderPartial('formularioMatricula', array('persona' => $this->persona));
        $html = $this->getPartial('formularioMatricula', array('persona' => $this->persona));
        $pdf = new DOMPDF;
        $pdf->load_html($html);
        $pdf->set_paper('A4', 'portrait');
        $pdf->render();
        $pdf->stream('formulario.pdf', array('Attachment' => 0));
    }

}
